package com.efounder.utils;

import android.content.Context;
import android.os.Bundle;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by Marcello on 2018/9/15.
 * 高德地图定位
 */
public class LocationUtils {

    public static AMapLocationClient getLocationCilent(AMapLocationClient mlocationClient, Context context) {
        if (mlocationClient == null) {
            //初始化定位  需要传Context类型的参数。推荐用getApplicationConext()方法
            mlocationClient = new AMapLocationClient(context);
            //初始化定位参数
            AMapLocationClientOption mLocationOption = new AMapLocationClientOption();
            //设置定位回调监听
//            mlocationClient.setLocationListener(this);
            //设置单次定位 该方法默认为false。
            mLocationOption.setOnceLocation(true);
            //选择定位模式 SDK默认选择使用高精度定位模式。
            // 高精度定位模式:Hight_Accuracy 同时使用网络定位和GPS定位
            //低功耗定位模式：Battery_Saving 不会使用GPS和其他传感器，只会使用网络定位（Wi-Fi和基站定位）
            //仅用设备定位模式：Device_Sensors 不需要连接网络，只使用GPS进行定位，这种模式下不支持室内环境的定位，自 v2.9.0 版本支持返回地址描述信息
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            //设置定位间隔,单位毫秒,默认为2000ms 最低1000ms
            mLocationOption.setInterval(5000);
            //设置是否返回地址信息（默认返回地址信息）
            mLocationOption.setNeedAddress(true);
            //设置是否强制刷新WIFI，默认为true，强制刷新,会增加电量消耗。
            mLocationOption.setWifiActiveScan(true);
//            设置定位请求超时时间，单位是毫秒，默认30000毫秒，建议超时时间不要低于8000毫秒。
            mLocationOption.setHttpTimeOut(30000);
            //设置是否开启定位缓存机制 缓存机制默认开启true 网络定位结果均会生成本地缓存，
            // 不区分单次定位还是连续定位。GPS定位结果不会被缓存
            mLocationOption.setLocationCacheEnable(true);
            //设置定位参数
            mlocationClient.setLocationOption(mLocationOption);
            // 此方法为每隔固定时间会发起一次定位请求，为了减少电量消耗或网络流量消耗，
            // 注意设置合适的定位时间的间隔（最小间隔支持为2000ms），并且在合适时间调用stopLocation()方法来取消定位请求
            // 在定位结束后，在合适的生命周期调用onDestroy()方法
            // 在单次定位情况下，定位无论成功与否，都无需调用stopLocation()方法移除请求，定位sdk内部会移除
//            mlocationClient.startLocation();//启动定位
        }
        return mlocationClient;

    }


    public static String getLocationStr(AMapLocation amapLocation) {
       if(amapLocation==null){
           return null;
       }

//        address = amapLocation.getAddress();//地址，如果option中设置isNeedAddress为false，则没有此结果，网络定位结果中会有地址信息，GPS定位不返回地址信息。
        amapLocation.getCountry();//国家信息
        amapLocation.getProvince();//省信息
        amapLocation.getCity();//城市信息
        amapLocation.getDistrict();//城区信息
        amapLocation.getStreet();//街道信息
        amapLocation.getStreetNum();//街道门牌号信息
        amapLocation.getCityCode();//城市编码
        amapLocation.getAdCode();//地区编码
//        title = amapLocation.getAoiName();//获取当前定位点的AOI信息
        String name = amapLocation.getPoiName();//获取当前定位点的POI信息
        amapLocation.getBuildingId();//获取当前室内定位的建筑物Id
        amapLocation.getFloor();//获取当前室内定位的楼层
        amapLocation.getGpsAccuracyStatus();//获取GPS的当前状态
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date(amapLocation.getTime());
        df.format(date);//定位时间
        String desc = "";
        Bundle locBundle = amapLocation.getExtras();
        if (locBundle != null) {
            desc = locBundle.getString("desc");
        }


      return desc;


    }

            }
